From b9b24cd1bf7d6b2c91b7a4ca597f3bc75ff9fb7e Mon Sep 17 00:00:00 2001 From: "kaf24@firebug.cl.cam.ac.uk" Date: Wed, 23 Nov 2005 13:58:44 +0100 Subject: [PATCH] Fix __gpfn_to_mfn() to work correctly when not executed in the queried domain's context. Signed-off-by: Keir Fraser --- xen/include/asm-x86/shadow.h | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/xen/include/asm-x86/shadow.h b/xen/include/asm-x86/shadow.h index 05544a8bcd..5d82713cae 100644 --- a/xen/include/asm-x86/shadow.h +++ b/xen/include/asm-x86/shadow.h @@ -283,21 +283,23 @@ static inline void shadow_mode_disable(struct domain *d) /************************************************************************/ -#define __mfn_to_gpfn(_d, mfn) \ - ( (shadow_mode_translate(_d)) \ - ? get_pfn_from_mfn(mfn) \ +#define __mfn_to_gpfn(_d, mfn) \ + ( (shadow_mode_translate(_d)) \ + ? get_pfn_from_mfn(mfn) \ : (mfn) ) -#define __gpfn_to_mfn(_d, gpfn) \ - ({ \ - (shadow_mode_translate(_d)) \ - ? get_mfn_from_pfn(gpfn) \ - : (gpfn); \ +#define __gpfn_to_mfn(_d, gpfn) \ + ({ \ + (shadow_mode_translate(_d)) \ + ? (((_d) == current->domain) ? \ + get_mfn_from_pfn(gpfn) : \ + gpfn_to_mfn_foreign((_d), (gpfn))) \ + : (gpfn); \ }) -#define __gpfn_to_mfn_foreign(_d, gpfn) \ - ( (shadow_mode_translate(_d)) \ - ? gpfn_to_mfn_foreign(_d, gpfn) \ +#define __gpfn_to_mfn_foreign(_d, gpfn) \ + ( (shadow_mode_translate(_d)) \ + ? gpfn_to_mfn_foreign(_d, gpfn) \ : (gpfn) ) extern unsigned long gpfn_to_mfn_foreign( -- 2.30.2